<?php
namespace app\demo_record\widget;
use Exception;

/**
 * Widget是控制器和视图之间的中间层
 * 将内部格式的数据转换成视图可以使用的数据,或者相反的操作
 * 有两种使用方式
 *  一种是绑定单独的Widget模板，返回的是处理好的HTML
 *  另一种是将Widget绑定到页面模板上，直接读取数据
 */
abstract class BaseWidget implements \ArrayAccess
{
    /**
     * 绑定单独的模板文件
     * @param string $template 模板路径
     * @return string
     */
    abstract public function fetch($template='');
    
    /**
     * 可以使用数组式访问
     * 方便模板中使用
     */
    public function offsetExists($offset)
    {
        return isset($this->$offset);
    }
    public function offsetGet($offset)
    {
        if(!isset($this->$offset)) throw new Exception("未定义的offset");
        return $this->$offset;
    }
    public function offsetSet($offset, $value)
    {
        if(!isset($this->$offset)) throw new Exception("未定义的offset");
        $this->$offset=$value;
    }
    public function offsetUnset($offset)
    {
        if(!isset($this->$offset)) throw new Exception("未定义的offset");
        unset($this->$offset);
    }
}
